// 版权归 瞄你个汪 所有。使用本代码应遵守相关法律法规和Apache 2.0开源许可要求。
package top.geeke.controller;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.geeke.controller.dto.AddSysRoleOrgInput;
import top.geeke.controller.dto.SearchSysRoleOrgInput;
import top.geeke.controller.dto.UpdateSysRoleOrgInput;
import top.geeke.entity.SysRoleOrg;
import top.geeke.service.ISysRoleOrgService;
import top.geeke.service.impl.SysRoleOrgServiceImpl;
import top.geeke.toolkit.http.BaseIdInput;
import top.geeke.toolkit.http.PageInput;
import top.geeke.toolkit.http.Result;

/**
 * <p>
 * 系统角色机构表 前端控制器
 * </p>
 * @author 瞄你个汪
 * @since 2024-01-01 12:00:00
 */
@Api(tags = "⚙ 系统角色机构管理")
@RestController()
@RequestMapping("/api/sysRoleOrg")
public class SysRoleOrgController {
    private final ISysRoleOrgService service;

    @Autowired
    public SysRoleOrgController(SysRoleOrgServiceImpl _service) {
        service = _service;
    }

    /**
     * <p>
     *  分页查询系统角色机构数据
     * </p>
     * @param input 分页参数
     * @return 查询结果
     */
    @PostMapping("page")
    @ApiOperation(value = "分页查询", notes = "分页查询系统角色机构数据")
    public Result<IPage<SysRoleOrg>> queryByPage(@Validated @RequestBody PageInput<SearchSysRoleOrgInput> input) {
        return Result.ok(input.reader((query, search) -> {
            // TODO 系统角色机构过滤逻辑
        }, this.service::list));
    }

    /**
     * <p>
     *  通过主键查询系统角色机构详情
     * </p>
     * @param input 主键输入参数
     * @return 单条数据
     */
    @PostMapping("detail")
    @ApiOperation(value = "查询详情", notes = "通过主键查询系统角色机构详情")
    public Result<SysRoleOrg> queryById(@Validated @RequestBody BaseIdInput input) {
        return Result.ok(this.service.getById(input.getId()));
    }

    /**
     * <p>
     *  新增系统角色机构数据
     * </p>
     * @param input 实体
     * @return 新增结果
     */
    @PostMapping("add")
    @ApiOperation(value = "新增数据", notes = "新增系统角色机构数据")
    public Result<SysRoleOrg> add(@Validated @RequestBody AddSysRoleOrgInput input) {
        SysRoleOrg entity = BeanUtil.copyProperties(input, SysRoleOrg.class);
        return this.service.save(entity) ? Result.ok(entity) : Result.error("新增失败");
    }

    /**
     * <p>
     *  更新系统角色机构数据
     * </p>
     * @param input 实体
     * @return 编辑结果
     */
    @PostMapping("update")
    @ApiOperation(value = "更新数据", notes = "更新系统角色机构数据")
    public Result<Boolean> update(@Validated @RequestBody UpdateSysRoleOrgInput input) {
        SysRoleOrg entity = BeanUtil.copyProperties(input, SysRoleOrg.class);
        return this.service.updateById(entity) ? Result.ok(true) : Result.error("更新失败");
    }

    /**
     * <p>
     *  删除系统角色机构数据
     * </p>
     * @param input 主键输入参数
     * @return 删除是否成功
     */
    @PostMapping("delete")
    @ApiOperation(value = "删除记录", notes = "删除系统角色机构数据")
    public Result<Boolean> deleteById(@Validated @RequestBody BaseIdInput input) {
        return this.service.removeById(input.getId()) ? Result.ok(true) : Result.error("删除失败");
    }
}
